

/**
* 新建Guid
*/
export function newGuid(): string {
    let guid = "{";
    for (let i = 1; i <= 32; i++) {
        let n = Math.floor(Math.random() * 16.0).toString(16);
        guid += n;
        if ((i == 8) || (i == 12) || (i == 16) || (i == 20))
            guid += "-";

    }
    return guid + "}";
}

/** 合并JSON对象 */
export function extend(des: any, src: any, override: boolean = true) {
    if (src instanceof Array) {
        for (let key = 0, len = src.length; key < len; key++)
            extend(des, src[key], override);
    }
    for (let key in src) {
        if (override || !(key in des)) {
            des[key] = src[key];
        }
    }

    return des;
}

export interface IDataService {
    /**
     * 查询
     * @param {string} command 命令ID
     * @param {{}} paramValues 参数
     * @param {number} startIndex 开始索引 
     * @param {number} maxCount 最大行数
     * @returns {Promise<any[]>} 返回
     */
    query(command: string, paramValues: {}, startIndex: number, maxCount: number): Promise<any[]>;
    /**
     * 插入
     * @param {string} command 命令ID
     * @param {Object[]} objects 插入对象集合
     * @returns {Promise<any>} 返回
     */
    insert(command: string, objects: Object[]): Promise<any>;
    /**
     * 获取数量
     * @param {string} command 命令ID
     * @param {{}} paramValues 参数
     */
    count(command: string, paramValues: {}): Promise<number>
}

/** 错误码 */
export enum ErrorStatus {
    /** 文件不存在 */
    ERROR_NOT_FOUND = 404,
    /** 方法不存在 */
    ERROR_FUNCTION_NOT_FOUND = 405,
    /** 服务异常 */
    ERROR_SERVICE = 500,
    /** 服务不存在 */
    ERROR_SERVICE_NOT_FOUND = 505,
    /** 没有权限 */
    ERROR_NOT_AUTHORITY = 900,
    /** 用户没有登录 */
    ERROR_USER_NOT_LOGIN = 901,
    /** 用户已经登录 */
    ERROR_USER_HAVE_LOGIN = 902
}

/**
 * 创建错误
 * @param status 状态码
 * @param msg 错误信息
 */
export function createError(status: number, msg: string) {
    let error = new Error(msg);
    error.status = status;
    return error;
}

/**
 * 名称:请求对象
 * @description 用户客户端请求服务端的请求对象
 * @author 胡燕龙
 */
export class RequestObject {

    constructor(/** 请求服务id */
        public service: string,
        /** 请求方法名称 */
        public functionName: string,
        /** 请求参数对象 */
        public args: any[]) {

    }
}